﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_05_Gestionar_Practicas_por_Materia;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using System.Data;



namespace vudu.Presentacion.Presentador.VU_05_Gestionar_Practicas_por_Materia
{
    public class PresentadorConsultarPractica
    {

       #region Atributos del Presentador
        public IContratoConsultarPractica _vista;
        private EnlaceLogico _fachada;
        private Escuela _miEscuela;
        private List<Materia> _misMaterias;
        public HorarioDeClase _miHorarioSeleccionado;
        private string _rol;
      #endregion
 
       #region Constructor
        public PresentadorConsultarPractica(IContratoConsultarPractica vista)
        {
            _vista = vista;
            _rol = (string)_vista.Sesion["TipoRol"];
            InitSecure(_rol);
        }
        #endregion

       #region Procedimientos del Presentador

        protected void InitSecure(string miRol)
        {
            //Valida el inicio de sesion;
            //con el usuario correcto;

            if ((miRol != null) && (miRol.Equals("Escuela")))
            {
                _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
                _miEscuela = (Escuela)_fachada.RolActual;
                _vista.LabelEscuela.Text = _miEscuela.NombreEscuela;
                _misMaterias = _fachada.ConsultarListaMateriasConPractica(_miEscuela.NombreEscuela);
                _miHorarioSeleccionado = new HorarioDeClase();
            }
            else
            { _vista.Redirect("../VU_15 Gestion de Acceso/InicioSistema.aspx"); }
        }

        #region carga de Ddl y GridView

        //Llena los datos del GridView1 (Este muestra todas las practicas de una seccion)
        public void LoadGridView()
        {
            // BUSCO LA LISTA DE PRACTICAS DADA LA SECCION MATERIA
            List<Practica> misPracticas = new List<Practica>();
            misPracticas = _fachada.ConsultarPracticasDadaSeccionMateria(Convert.ToInt32(_vista.DdlSeccTeoria.SelectedItem.Value));

            // SETEO EL NUMERO DE COLUMNAS DEL GRIDVIEW Y LES DOY NOMBRE
            DataTable table = new DataTable();
            table.Columns.Add("Seccion", typeof(string));
            table.Columns.Add("Nombre", typeof(string));
            table.Columns.Add("Profesor", typeof(string));
            table.Columns.Add("Id Practica", typeof(int));

            // COMIENZO EL LLENADO DEL GRIDVIEW
            foreach (Practica miPractica in misPracticas)
            {
                String nombrePractica = miPractica.NombrePractica;
                string numSeccion;
                if (nombrePractica != null)
                {
                    // CONSRUYO EL STRING DEL NOMBRE COMPLETO DEL PROFESOR
                    string nombreProfesor = miPractica.profesor.Nombre + " " + miPractica.profesor.Apellido;
                    if (miPractica.NumeroSeccion < 10)
                    { numSeccion = "00" + miPractica.NumeroSeccion.ToString(); }
                    else
                    { numSeccion = "0" + miPractica.NumeroSeccion.ToString(); }
                    table.Rows.Add(numSeccion, miPractica.NombrePractica, nombreProfesor, miPractica.IdPractica);
                }
            }
            _vista.miGridView.DataSource = table;
            _vista.miGridView.DataBind();
            _vista.miGridView.Visible = true;

            // OCULTO LOS ID PRACTICAS PARA QUE NO APAREZCAN EN LA VISTA
            HideIdPracticaColumn(_vista.miGridView);
        }

        //Llena los datos del GridView2 (este grid view muestra los horarios de la practica)
        public void LoadGridView2 ()
        {
            // BUSCO LA LISTA DE HORARIOS DADA LA PRACTICA
            int practicaSelect;
            int conta = 0;
            List<Practica> misPracticas = new List<Practica>();
            misPracticas = _fachada.ConsultarPracticasDadaSeccionMateria(Convert.ToInt32(_vista.DdlSeccTeoria.SelectedItem.Value));
            practicaSelect = Convert.ToInt32(_vista.miGridView.SelectedRow.Cells[4].Text);
           
            // SETEO EL NUMERO DE COLUMNAS DEL GRIDVIEW2 Y LES DOY NOMBRE
            DataTable table = new DataTable();
            table.Columns.Add("Dia", typeof(string));
            table.Columns.Add("Hora de Inicio", typeof(string));
            table.Columns.Add("Hora Final", typeof(string));
            //table.Columns.Add("Profesor", typeof(string));
            table.Columns.Add("Salon", typeof(string));

            // COMIENZO EL LLENADO DEL GRIDVIEW2
            foreach (Practica miPractica in misPracticas)
            {
                if (miPractica.IdPractica == practicaSelect)
                {
                    String nombrePractica = miPractica.NombrePractica;
                    if (nombrePractica != null)
                    {
                        //Este ciclo verifia si la practica tiene 1 o mas horarios asignados.
                        foreach (HorarioDeClase horarios in miPractica.horarioDeClase)
                        {
                            //ACA SE CREA LA TUPA A MOSTRAR EN EL GRIDVIEW2
                            table.Rows.Add(miPractica.horarioDeClase[conta].Dia, Convert.ToString(miPractica.horarioDeClase[conta].HoraInicio.Hour) +
                                ":00", Convert.ToString(miPractica.horarioDeClase[conta].HoraFin.Hour) + 
                                ":00", miPractica.horarioDeClase[conta].SalonDeClase.Nombre);
                            conta = conta + 1;
                        }
                    }
                }
            }
            _vista.miGridView2.DataSource = table;
            _vista.miGridView2.DataBind();
            _vista.miGridView2.Visible = true;

        }

        //Carga los datos de las materias con practicas en el DropDownList
        public void LoadDdlMateria()
        {
            if ((_misMaterias != null) && (_misMaterias.Count > 0))
            {
                for (int index = 0; index < _misMaterias.Count; index++)
                {
                    ListItem myListItem = new ListItem();
                    myListItem.Value = _misMaterias[index].Codigo.ToString();
                    myListItem.Text = _misMaterias[index].Nombre;
                    _vista.DdlMateria.Items.Add(myListItem);
                }
            }
            else
            {
                _vista.LabelStatus.Text = "Operacion Fallida: No existen materias con practicas registradas";
                _vista.LabelStatus.ForeColor = System.Drawing.Color.Red;
                _vista.LabelStatus.Visible = true;
            }
        }

        //Carga los datos de las Practicas de la materia seleccionada en el DropDownList anterior
        public void LoadDdlSeccTeoria()
        {
            List<SeccionMateria> misSecciones = new List<SeccionMateria>();
            int idMateriaSelect = Convert.ToInt32(_vista.DdlMateria.SelectedItem.Value);
            UnLoadAllDdlSeccTeoria();
            if (idMateriaSelect != 0)
            {

                misSecciones = _fachada.ArmarListaDeSeccionesDisponibles(_miEscuela.IdEscuela, idMateriaSelect);
                string seccionCod = "00";
                for (int index = 0; index < misSecciones.Count; index++)
                {
                    if ((misSecciones[index].ListaPractica != null) && (misSecciones[index].ListaPractica.Count > 0))
                    {
                        ListItem myListItem = new ListItem();
                        myListItem.Value = misSecciones[index].IdSeccionMateria.ToString();
                        myListItem.Text = seccionCod + misSecciones[index].Codigo;
                        _vista.DdlSeccTeoria.Items.Add(myListItem);
                    }
                }
                if ((_vista.DdlSeccTeoria.Items != null) && (_vista.DdlSeccTeoria.Items.Count > 1))
                { VisibleSeccTeoria(); }
                //else
                //{ _vista.DdlSeccTeoria.Items.Add("No hay secciones con practica"); }
            }
        }

        #endregion

        #region descarga de los ddl y gridview

        //Borra la Informacion de los DropDownList para evitar la duplicidad de la data
        public void UnLoadDdlGeneric(DropDownList myDdl)
        {
            ListItem myListItem = new ListItem();
            myDdl.Items.Clear();
            myListItem.Value = "0";
            myListItem.Text = "- Seleccionar -";
            myDdl.Items.Add(myListItem);
            myDdl.Visible = false;
        }

        //Borra la Informacion de los GridView para evitar la duplicidad de la data
        public void UnLoadGridView()
        {
            DataTable myDataTable = new DataTable();
            myDataTable.Columns.Add("Nombre", typeof(string));
            myDataTable.Columns.Add("Nro. Seccion", typeof(string));
            myDataTable.Columns.Add("Profesor", typeof(string));
            myDataTable.Columns.Add("Estatus", typeof(string));
            _vista.miGridView.DataSource = myDataTable;
            _vista.miGridView.DataBind();
            _vista.miGridView.Visible = false;
        }

        //Borra la Informacion de los DropDownList para evitar la duplicidad de la data
        protected void UnLoadAllDdlSeccTeoria()
        {
            UnLoadDdlGeneric(_vista.DdlSeccTeoria);
            UnVisibleAllSeccTeoria();
        }

        #endregion

        #region Visibilidad y Ocultamiento de GridView y Ddl

            protected void VisibleSeccTeoria()
            {
                _vista.LabelOSeccTeoria.Visible = true;
                _vista.LabelSeccTeoria.Visible = true;
                _vista.DdlSeccTeoria.Visible = true;
            }

            public void UnVisibleAllSeccTeoria()
        {
            _vista.LabelOSeccTeoria.Visible = false;
            _vista.LabelSeccTeoria.Visible = false;
        }

            private void HideIdPracticaColumn(GridView gridView)
        {
            _vista.miGridView.HeaderRow.Cells[4].Visible = false;
            foreach (GridViewRow row in _vista.miGridView.Rows)
            {
                row.Cells[4].Visible = false;
            }
        }

        #endregion

        #region llamada a la fachada

        //Aca se llama a la fachada para podeer consultar la lista de horario
        //de la practica seleccionada.
        public void ConsultarPractica(int idPractica)
        {
            List<HorarioDeClase> retorno = _fachada.ConsultarPractica(idPractica);
        }
        #endregion

        #endregion
    }



    }
